//
//  clock_lib.c
//  electronic_clock
//
//  Created by 傅凯 on 2018/10.
//  Copyright © 2018年 赛博智能车实验室. All rights reserved.
//

#ifndef clock_lib_h
#define clock_lib_h


/********时间部分********/
//时钟工作状态
//正常显示模式 or 设置模式
typedef enum
{
    CLOCK_NORMAL = 0, //正常模式
    CLOCK_SETTING,    //设置模式
}ClockWorkStatusNode;
//时钟设置
typedef enum
{
    SECOND_SET = 10,    //秒设置
    MINUTE_SET,     //分设置
    HOUR_SET,       //时设置
    DATE_SET,       //日期设置
    MONTH_SET,      //月份设置
    YEAR_SET,       //年份设置
    WEEK_SET,       //星期设置
}TimeSetNode;
//星期显示
typedef enum
{
    Monday = 20,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday,
}WeekNode;
//闰年状态
typedef enum
{
    LEAP_YEAR = 30,
    NOT_LEAP_YEAR,
}LeapYearStatusNode;

/********秒表部分********/
//秒表工作状态
typedef enum
{
    WATCH_STOP = 40,  //停止
    WATCH_START,      //开始
    WATCH_PAUSE,      //暂停
}StopWatchStatusNode;

/********闹钟部分********/
//闹钟工作状态
typedef enum
{
    ALARM_STOP = 40,    //闹钟关闭
    ALARM_START,        //闹钟开启
    ALARM_WORKING,      //闹钟正在响铃
}AlarmClockWorkStatusNode;
//闹钟时间设置
typedef enum
{
    ALARM_MINUTE_SET = 45,  //闹钟分设置
    ALARM_HOUR_SET,
}AlarmTimeSetNode;

/********记时器部分********/
//记时器工作状态
typedef enum
{
    TIMER_STOP = 50,    //记时器关闭
    TIMER_START,        //记时器工作
    TIMER_ALARM,        //记时器报警
}TimerWorkStatusNode;
//计时器时间设置
typedef enum
{
    TIMER_SECOND_SET = 55,
    TIMER_MINUTE_SET,
    TIMER_HOUR_SET,
}TimerSetNode;



//时钟处理结构体
typedef struct
{
    //时间
    int second; //秒
    int minute; //分
    int hour;   //时
    int date;   //日期
    int month;  //月份
    int year;   //年份

    //秒表
    int stop_millisecond;//毫秒
    int stop_second;   
    int stop_minute;
    int stop_hour;

    //闹钟
    int alarm_minute;   //闹钟分
    int alarm_hour;     //闹钟时

    //计时器
    int timer_second;
    int timer_minute;
    int timer_hour;

    //时钟部分
    ClockWorkStatusNode ClockWorkStatus;  //时钟工作状态
    TimeSetNode TimeSet;    //时钟设置
    WeekNode Week;//星期
    LeapYearStatusNode LeapYearStatus;//闰年状态

    //闹钟部分
    AlarmClockWorkStatusNode AlarmClockWorkStatus;//闹钟工作状态
    AlarmTimeSetNode AlarmTimeSet;//闹钟时间设置

    //秒表部分
    StopWatchStatusNode StopWatchStatus;//秒表工作状态

    //记时器部分
    TimerWorkStatusNode TimerWorkStatus;
    TimerSetNode TimerSet;
}ClockNode;


void LeapYearJudge(ClockNode *clk);//闰年判断
void ClockWork(ClockNode *clk, int sec_times);//时钟工作函数
void TimeAddSet(ClockNode *clk);//时间加，每次增加1
void TimeDecreaseSet(ClockNode *clk);//时间减，每次减1
void AlarmWork(ClockNode *clk, int sec_times, int alarm_work_sec);//闹钟工作
void AlarmAddSet(ClockNode *clk);//闹钟时间加1
void AlarmDecreaseSet(ClockNode *clk);//闹钟时间减1
void StopWatchWork(ClockNode *clk, int millisecond_times);//秒表工作函数
void TimerWork(ClockNode *clk, int sec_times, int timer_alarm_time);//计时器工作函数
void TimerAddSet(ClockNode *clk);//计时器时间加1
void TimerDecreaseSet(ClockNode *clk);//计时器时间减1



#endif


